package juego.armas;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import principal.Constantes;

import juego.armas.proyectiles.Proyectil;
import juego.enemigos.ArmaBonus;
import juego.enums.tipoMovimiento;
import basicas.Posicion;

public abstract class Arma {
	protected int disparos;

	public Arma() {		
	}
	
	public Arma(Node n) {
		disparos = Integer.parseInt(n.getChildNodes().item(1).getTextContent());
	}
	
	private Posicion centrarDisparo(Posicion posicion,tipoMovimiento direccion){
		Posicion origenDisparo = posicion.Copiar();
		if(direccion == tipoMovimiento.arriba)
			origenDisparo.mover(Constantes.CENTRAR_DIPARO,0);
		if((direccion == tipoMovimiento.abajo)||((direccion == tipoMovimiento.derecha)))
			origenDisparo.mover(Constantes.CENTRAR_DIPARO,Constantes.CENTRAR_DIPARO);
		else
			origenDisparo.mover(0,Constantes.CENTRAR_DIPARO);
		return origenDisparo;
	}
	
	
	public Proyectil disparar(Posicion posicion, tipoMovimiento direccion, int disparadorId, double velocidadDisparo) {
		Posicion origenDisparo= centrarDisparo(posicion,direccion);
		Proyectil proyectil = nuevoDisparo(origenDisparo, direccion, disparadorId);		
		proyectil.setVelocidadMovimiento(velocidadDisparo);
		disparos = disparos - 1;
		return proyectil;
	}
	
	public int getCantidadDisparos() {
		return disparos;
	}
	
	public void setCantidadDisparos(int cantidad) {
		this.disparos = cantidad;
	}
	
	public abstract Proyectil nuevoDisparo(Posicion posicion, tipoMovimiento direccion, int disparadorId);

	public Element getElemento(Document doc) {		
		Element nuevoNodo;
		Element nodoHijo;
		
		nuevoNodo = doc.createElement(this.getClass().getName());		
		
		nodoHijo = doc.createElement("disparos");		
		nuevoNodo.appendChild(nodoHijo);
		nodoHijo.setTextContent(String.valueOf(disparos));	

		return nuevoNodo;
	}

	public abstract ArmaBonus armaBonus(Posicion posicion);
}
